NS BASIC Announces Winner of first program contest! The winner of NS BASIC Corporation's first program contest is Richard Van Alstyne of New Brunswick, New Jersey. His program, "Dive", helps scuba divers with the calculations and record keeping needed to make multiple deep dives safely. It takes the Newton to a place no one would dream of taking a notebook computer: the wet, heaving deck of a dive boat. It was selected because of its good use of a number of NS BASIC extensions: windows, buttons, handwritten input and popup pick lists. The complete listing of the program is at the end of this message. Richard reports that he's currently putting the finishing touches on a new version of the program, where the results of each dive are saved to a file. He originally wrote the program using QuickBASIC on a PC, and reports the program came over into NS BASIC without a whole lot of trouble. You can email him at ravajr@aol.com. Congratulations, Richard! An NS BASIC T Shirt is on its way to you. Keep you eyes open: we'll be announcing the next contest soon. For more information or to order NS BASIC, call (416) 264-5999 or fax (416)264-5888. As always, we can also be reached on the internet at gh@hookup.net. DIVE: by Richard van Alstyne You can run this on your Newton by cutting and pasting to the serial connection within NS BASIC. Be careful of the long lines! 0001 DIM RepGro9[10],SurInt9[10],RepGro09[10],MaxDep9[10],ResNit9[10], BotTim9[10],RepGro19[10] 0010 CLS 0100 LET W0Spec.ViewBounds={top:2,bottom:14,left:4,right:235} 0101 LET W0Spec.ViewFont={family:'geneva,face:0,size:10} 0102 LET W0Spec.ViewJustify=2 0103 WINDOW W0Num,W0Spec 0104 SHOW W0Num 0105 WPRINT W0Num,"DIVE PROFILE 0.5b RICHARD VAN ALSTYNE" 0110 LET W1Spec.ViewBounds={top:18,bottom:136,left:5,right:132} 0111 LET W1Spec.ViewFont={family:'geneva,face:0,size:10} 0112 LET W2Spec.ViewJustify=0 0113 WINDOW W1Num,W1Spec 0114 SHOW W1Num 0120 LET W2Spec.ViewBounds={top:18,bottom:30,left:136,right:234} 0121 LET W2Spec.ViewFont={family:'geneva,face:0,size:10} 0122 LET W2Spec.ViewJustify=2 0123 LET W2Spec.GOTO=2000 0124 WINDOW W2Num,W2Spec 0125 SHOW W2Num 0126 WPRINT W2Num,"REPETATIVE GROUP" 0130 LET W3Spec.ViewBounds={top:34,bottom:46,left:136,right:234} 0131 LET W3Spec.ViewFont={family:'geneva,face:0,size:10} 0132 LET W3Spec.ViewJustify=2 0133 LET W3Spec.GOTO=2050 0134 WINDOW W3Num,W3Spec 0135 SHOW W3Num 0136 WPRINT W3Num,"SURFACE INTERVAL" 0140 LET W4Spec.ViewBounds={top:50,bottom:62,left:136,right:234} 0141 LET W4Spec.ViewFont={family:'geneva,face:0,size:10} 0142 LET W4Spec.ViewJustify=2 0143 LET W4Spec.GOTO=2100 0144 WINDOW W4Num,W4Spec 0145 SHOW W4Num 0146 WPRINT W4Num,"MAXIMUM DEPTH" 0150 LET W5Spec.ViewBounds={top:66,bottom:78,left:136,right:234} 0151 LET W5Spec.ViewFont={family:'geneva,face:0,size:10} 0152 LET W5Spec.ViewJustify=2 0153 LET W5Spec.GOTO=2150 0154 WINDOW W5Num,W5Spec 0155 SHOW W5Num 0156 WPRINT W5Num,"BOTTOM TIME" 0160 LET W6Spec.ViewBounds={top:82,bottom:94,left:136,right:234} 0161 LET W6Spec.ViewFont={family:'geneva,face:0,size:10} 0162 LET W6Spec.ViewJustify=2 0163 LET W6Spec.GOTO=0900 0164 WINDOW W6Num,W6Spec 0165 SHOW W6Num 0166 WPRINT W6Num,"EVALUATE" 0170 LET W7Spec.ViewBounds={top:98,bottom:110,left:136,right:164} 0171 LET W7Spec.ViewFont={family:'geneva,face:0,size:10} 0172 LET W7Spec.ViewJustify=2 0173 LET W7Spec.GOTO=2200 0174 WINDOW W7Num,W7Spec 0175 SHOW W7Num 0176 WPRINT W7Num,"PREV" 0180 LET W8Spec.ViewBounds={top:98,bottom:110,left:168,right:195} 0181 LET W8Spec.ViewFont={family:'geneva,face:0,size:10} 0182 LET W8Spec.ViewJustify=2 0183 LET W8Spec.GOTO=2210 0184 WINDOW W8Num,W8Spec 0185 SHOW W8Num 0186 WPRINT W8Num,"NEXT" 0190 LET DivNum=0 0191 LET RepGro=" " 0192 LET SurInt=0 0193 LET RepGro0=" " 0194 LET MaxDep=0 0195 LET ResNit=0 0196 LET BotTim=0 0197 LET RepGro1=" " 0198 LET DivInc=0 0199 GOTO 0920 0900 ON MaxDepLev GOSUB 0999,0999,0999,0999,0999,0980,0982,0984,0986,0988,0990,0992,0994,0996,0998 0901 LET ResNit=STRINGTONUMBER(t0[STRPOS("ABCDEFGHIJKLM",RepGro0,0)]) 0902 LET BotTim=BotTim-ResNit 0920 LET DivSpe="Dive #"&DivNum&":"&chr(13) 0921 LET DivSpe=DivSpe&" Repetative Group="&RepGro 0922 LET DivSpe=DivSpe&chr(13) 0923 LET DivSpe=DivSpe&" Surface Interval="&SurInt 0924 LET DivSpe=DivSpe&chr(13) 0925 LET DivSpe=DivSpe&" Repetative Group="&RepGro0 0926 LET DivSpe=DivSpe&chr(13) 0927 LET DivSpE=DivSpe&" Maximum Depth="&MaxDep 0928 LET DivSpe=DivSpe&chr(13) 0929 LET DivSpe=DivSpe&" Residual Nitrogen="&ResNit 0930 LET DivSpe=DivSpe&chr(13) 0931 LET DivSpe=DivSpe&" Bottom Time=" 0932 IF BotTim<0 THEN LET DivSpe=DivSpe&"**" 0933 LET DivSpe=DivSpe&BotTim 0934 LET DivSpe=DivSpe&chr(13) 0935 LET DivSpe=DivSpe&" Total Bottom Time="&ResNit+BotTim 0936 LET DivSpe=DivSpe&chr(13) 0937 LET DivSpe=DivSpe&" Repetative Group="&RepGro1 0938 WPRINT W1Num,DivSpe 0939 STOP 0980 LET t0=["7","17","25","37","49","61","73","87","101","116","138","161","187"] 0981 RETURN 0982 LET t0=["6","13","21","29","38","47","56","66","76","87","99","111","124"] 0983 RETURN 0984 LET t0=["5","11","17","24","30","36","44","52","61","70","79","88","97"] 0985 RETURN 0986 LET t0=["4","9","15","20","26","31","37","43","50","57","64","72","80"] 0987 RETURN 0988 LET t0=["4","8","13","18","23","28","32","38","43","48","54","61","68"] 0989 RETURN 0990 LET t0=["3","7","11","16","20","24","29","33","38","43","47","53","58"] 0991 RETURN 0992 LET t0=["3","7","10","14","18","22","26","30","34","38","43","48","52"] 0993 RETURN 0994 LET t0=["3","6","10","13","16","20","24","27","31","34","38","42","47"] 0995 RETURN 0996 LET t0=["3","6","9","12","15","18","21","25","28","32","35","39","43"] 0997 RETURN 0998 LET t0=["3","6","8","11","13","16","19","22","25","28","31","35","38"] 0999 RETURN 1000 HWINPUT Inp$,Pro,PopUp 1001 LET Fla=NIL 1002 FOR t=0 TO Lim 1003 IF Inp$<>PopUp[t] THEN GOTO 1006 1004 LET Fla=t 1005 LET t=Lim 1006 NEXT t 1007 IF Fla=NIL THEN GOTO 1000 1008 RETURN 1100 HWINPUT Inp$,Pro,PopUp 1101 LET Inp=STRINGTONUMBER(Inp$) 1102 LET Fla=NIL 1103 FOR t=0 TO Lim 1104 IF Inp>STRINGTONUMBER(PopUp[t]) THEN GOTO 1107 1105 LET Fla=t 1106 LET t=Lim 1107 NEXT t 1108 IF Fla=NIL THEN GOTO 1100 1109 RETURN 2000 LET Pro="Please select Repetative Group" 2001 LET PopUp=["A","B","C","D","E","F","G","H","I","J","L","M"] 2002 LET Lim=12 2003 GOSUB 1000 2007 LET RepGro=Inp$ 2008 LET RepGroLev=Fla+1 2009 STOP 2050 LET Pro="Please select Surface Interval" 2051 ON RepGroLev GOSUB 2053 GOSUB 1100 2057 LET SurInt=STRINGTONUMBER(PopUp[Fla-1]) 2058 LET RepGro0=SUBSTR("ABCDEFGHIJKLM",RepGroLev-Fla,1) 2059 STOP 2100 LET Pro="Please select Maximum Depth" 2101 LET PopUp=["15","20","25","30","35","40","50","60","70","80","90","100","110","1 20","130"] 2102 LET Lim=14 2103 GOSUB 1100 2107 LET MaxDep=STRINGTONUMBER(PopUp[Fla]) 2108 LET MaxDepLev=Fla+1 2109 STOP 2150 LET Pro="Please select Bottom Time" 2151 ON MaxDepLev GOSUB 2152 GOSUB 1100 2157 LET BotTim=STRINGTONUMBER(PopUp[Fla]) 2158 LET RepGro1=SUBSTR("ABCDEFGHIJKLM",Fla,1) 2159 STOP 2200 LET DivInc=0 2201 IF DivNum>0 THEN LET DivInc=-1 2202 GOTO 2220 2210 LET DivInc=0 2211 IF DivNum<9 THEN LET DivInc=1 2220 LET RepGro9[DivNum]=RepGro 2221 LET SurInt9[DivNum]=SurInt 2222 LET RepGro09[DivNum]=RepGro0 2223 LET MaxDep9[DivNum]=MaxDep 2224 LET ResNit9[DivNum]=ResNit 2225 LET BotTim9[DivNum]=BotTim 2226 LET RepGro19[DivNum]=RepGro1 2227 LET DivNum=DivNum+DivInc 2228 LET RepGro=RepGro9[DivNum] 2229 LET SurInt=SurInt9[DivNum] 2230 LET RepGro0=RepGro09[DivNum] 2231 LET MaxDep=MaxDep9[DivNum] 2232 LET ResNit=ResNit9[DivNum] 2233 LET BotTim=BotTim9[DivNum] 2234 LET RepGro1=RepGro19[DivNum] 2235 GOTO 0920 9011 LET PopUp=["10","999"] 9012 LET Lim=10 9013 RETURN 9021 LET PopUp=["10","200","999"] 9022 LET Lim=2 9023 RETURN 9031 LET PopUp=["10","100","289","999"] 9032 LET Lim=3 9033 RETURN 9041 LET PopUp=["10","70","159","349","999"] 9042 LET Lim=4 9043 RETURN 9051 LET PopUp=["10","55","118","203","393","999"] 9052 LET Lim=5 9053 RETURN 9061 LET PopUp=["10","46","90","149","238","426","999"] 9062 LET Lim=6 9063 RETURN 9071 LET PopUp=["10","41","76","120","179","266","456","999"] 9072 LET Lim=7 9073 RETURN 9081 LET PopUp=["10","37","67","102","144","201","290","480","999"] 9082 LET Lim=8 9083 RETURN 9091 LET PopUp=["10","34","60","90","123","165","224","313","502","999"] 9092 LET Lim=9 9093 RETURN 9101 LET PopUp=["10","32","55","80","108","141","185","243","341","521","999"] 9103 RETURN 9111 LET PopUp=["10","29","50","72","96","124","159","202","260","349","539","999"] 9112 LET Lim=11 9113 RETURN 9121 LET PopUp=["10","27","46","65","86","110","140","174","217","276","363","553","9 99"] 9122 LET Lim=12 9123 RETURN 9131 LET PopUp=["10","26","43","60","79","100","126","155","189","233","290","379","5 69","999"] 9132 LET Lim=13 9133 RETURN 9411 LET PopUp=["35","70","110","160","225","350"] 9412 LET Lim=5 9413 RETURN 9421 LET PopUp=["25","50","75","100","135","180","240","325"] 9422 LET Lim=7 9423 RETURN 9431 LET PopUp=["20","35","55","75","100","125","160","195","245","315"] 9432 LET Lim=9 9433 RETURN 9441 LET PopUp=["15","30","45","60","75","90","120","145","170","205","250"] 9442 LET Lim=10 9443 RETURN 9451 LET PopUp=["5","15","25","40","50","60","80","100","120","140","160","190","220" ] 9452 LET Lim=12 9453 RETURN 9461 LET PopUp=["5","15","25","30","40","50","70","80","100","110","130","150"] 9462 LET Lim=11 9463 RETURN 9471 LET PopUp=["0","10","15","25","30","40","50","60","70","80"] 9472 LET Lim=9 9473 RETURN 9481 LET PopUp=["0","10","15","20","25","30","40","50"] 9482 LET Lim=7 9483 RETURN 9491 LET PopUp=["0","5","10","15","20","30","35","40"] 9492 LET Lim=7 9493 RETURN 9501 LET PopUp=["0","5","10","15","20","25","30"] 9502 LET Lim=6 9503 RETURN 9511 LET PopUp=["0","5","10","12","15","20","25"] 9512 LET Lim=6 9513 RETURN 9521 LET PopUp=["0","5","7","10","15","20"] 9522 LET Lim=5 9523 RETURN 9531 LET PopUp=["0","0","5","10","13"] 9532 LET Lim=4 9533 RETURN 9541 LET PopUp=["0","0","5","10"] 9542 LET Lim=3 9543 RETURN 9551 LET PopUp=["0","0","5"] 9552 LET Lim=2 9553 RETURN * George W.P. Henne gh@hookup.net NS BASIC Corporation: BASIC for the Newton! Orders: (416) 264-5999 fax (416) 264-5888